/**
 * Copyright (C), 2015-2021, XXX有限公司
 * FileName: CommTimer
 * Author:   吴建森
 * Date:     2021/3/4 18:09
 * Description:
 * History:
 * <author>吴建森      <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.sen.utils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.sen.dao.ActivityDao;
import com.sen.dao.SellDao;
import com.sen.dao.SellheadDao;
import com.sen.entity.ActivityEntity;
import com.sen.entity.SellEntity;
import com.sen.entity.SellheadEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Logger;

import static cn.hutool.core.date.DateUtil.now;

/**
 * 〈一句话功能简述〉<br>
 * 〈〉
 *
 * @author 吴建森
 * @create 2021/3/4
 * @since 1.0.0
 */
@Component
public class CommTimer {
    @Autowired
    private SellheadDao sellheadDao;
    @Autowired
    private SellDao sellDao;
    @Autowired
    private ActivityDao activityDao;

    //定时任务每次凌晨判断活动是否结束同时关闭
    /**
     *用于关闭活动使用
     秒 分 时 日 月 星期 0-7表示周一-周日下图示每天凌晨24点执行
     */
    @Scheduled(cron = "0 0 23 * * ?")
    public void schedule(){
        System.out.println("定时任务开启");
        ActivityEntity state = activityDao.selectOne(new QueryWrapper<ActivityEntity>().eq("state", "0"));
        //如果还有活动仍为运行状态
        if (state!=null){
            //查询当前活动是否在当前时间
            ActivityEntity activityEntity = activityDao.selectActivityById(state.getAid());
            //如果不在当前活动时间则修改为活动关闭状态
            if (activityEntity==null){
                state.setState(1);
                activityDao.updateById(state);
            }
        }
//        activityDao.update()
    }

    /**
     * 每天凌晨一点判断是否在活动时间（用于开启互动使用）
     */
    @Scheduled(cron = "0 0 1 * * ?")
    public void schedule2(){
        ActivityEntity state = activityDao.selectOne(new QueryWrapper<ActivityEntity>().eq("state", "2"));
        //如果还有活动仍为运行状态
        if (state!=null){
            //查询当前活动是否在当前时间
            ActivityEntity activityEntity = activityDao.selectActivityById(state.getAid());
            //如果在当前活动时间则修改为活动开启
            if (activityEntity!=null){
                state.setState(0);
                activityDao.updateById(state);
            }
        }
//        activityDao.update()
    }

    /**
     * 订单关闭(设置指定30分钟，修改订单状态为已关闭)
     * @param sid  订单号
     */
    public void orderClose(final String sid) {
        final Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                SellheadEntity sellhead = sellheadDao.selectOne(new QueryWrapper<SellheadEntity>().eq("sid", sid));
                try {
                    Integer state = sellhead.getState();
                    //如果订单尚未支付则使订单作废,删除订单
                    if(state == 1) {
//                        sellhead.setState(2);
                        sellheadDao.delete(new UpdateWrapper<SellheadEntity>().eq("sid",sid));
                        sellDao.delete(new QueryWrapper<SellEntity>().eq("sid", sid));
                        System.out.println("订单号："+sid+"已作废");
                    }
                    else{
                        timer.cancel();
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                // 中断线程
                timer.cancel();
            }
        },30*60*1000);
    }
}
